package view.kasse;

import control.KasseController;
import control.SalgsController;
import databasehandling.HandlerFactory;
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import model.Billet;
import model.BilletSalg;
import model.EnhedsSalg;
import model.EventSalg;
import model.Kasse;
import model.Salg;
import model.Vare;
import model.VareSalg;
import utility.ConfirmDialog;
import utility.DebugUtility;
import utility.NumberRestrictionDocument;
import utility.PriceFormater;
import utility.ScreenImage;
import view.MainGUI;
import view.touchability.SkærmNumpad;

/**
 *
 * @author Malene
 */
public class KassePanel extends javax.swing.JPanel {

    private final MainGUI mainGUI;
    private final SkærmNumpad skærmNumpad;

    /**
     * Creates new form KassePanel
     * @param mainGUI
     */
    public KassePanel(MainGUI mainGUI) {
        initComponents();
        this.mainGUI = mainGUI;
        skærmNumpad = SkærmNumpad.getInstance();
        skærmNumpad.setLocation(mainGUI.getX() + jPanel1.getLocation().x + 110, mainGUI.getY() + jPanel1.getLocation().y + 90 + 105);

        revalidate();
    }

    public void visRabatPopUpPanel(EnhedsSalg enhedsSalg) {
        Rectangle r = new Rectangle(getLocationOnScreen(), getSize());
        ImageIcon img = null;
        try {
            img = new ImageIcon(ScreenImage.createImage(r));
        } catch (AWTException ex) {
            Logger.getLogger(BetalingsPanel.class.getName()).log(Level.SEVERE, null, ex);
        }
        mainGUI.visRabatPopUp(img, enhedsSalg);
    }

    /**
     * Laver paneler udfra VareSalg, BilletSalg og EventSalg i det aktiveSalg,
     * samt rabatListePaneler hvis der er afgivet rabat.
     */
    public void opdaterKasseListeOgAktivtSalg() {
        Salg aktivtSalg = SalgsController.getInstance().getAktivtSalg();

        if (aktivtSalg == null) {
            jTextField1_Varenr.setEnabled(false);
            jTextField2_Antal.setEnabled(false);
            returCheckBox.setEnabled(false);
            jButton14_Barn.setEnabled(false);
            jButton13_Voksen.setEnabled(false);
            jButton16_Gratist.setEnabled(false);
            jButton15_Event1.setEnabled(false);
            jTextField1_Rabat.setEnabled(false);
            valutaDKK_Knap.setEnabled(false);
            valutaEUR_Knap.setEnabled(false);
            dankortKnap.setEnabled(false);
            kontantKnap.setEnabled(false);
            jButton15_Fortryd.setEnabled(false);
            jButton13_AfslutSalg1.setEnabled(false);
            kasseListePanel.removeAll();
            kasseListePanel.add(nytSalgKnap);
            nytSalgKnap.setBounds(100, 160, 230, 130);
            nytSalgKnap.setVisible(true);
            jTextField1_Totalbeløb.setText("");
        } else {
            if (aktivtSalg.isValutaDKK()) {
                valutaDKK_Knap.setBackground(MainGUI.BUTTON_SELECTED_COLOR);
                valutaEUR_Knap.setBackground(MainGUI.BUTTON_UNSELECTED_COLOR);
            } else {
                valutaDKK_Knap.setBackground(MainGUI.BUTTON_UNSELECTED_COLOR);
                valutaEUR_Knap.setBackground(MainGUI.BUTTON_SELECTED_COLOR);
            }
            if (aktivtSalg.isDankort()) {
                dankortKnap.setBackground(MainGUI.BUTTON_SELECTED_COLOR);
                kontantKnap.setBackground(MainGUI.BUTTON_UNSELECTED_COLOR);
            } else {
                dankortKnap.setBackground(MainGUI.BUTTON_UNSELECTED_COLOR);
                kontantKnap.setBackground(MainGUI.BUTTON_SELECTED_COLOR);
            }
            jTextField1_Rabat.setText(aktivtSalg.getRabat() + "");
            kasseListePanel.removeAll();
            int locY = 0;

            //<editor-fold defaultstate="collapsed" desc="Tilføjer KasseVareListePaneler til kasseListePanelet">
            ArrayList<KasseVareListePanel> kasseVareListePanels = new ArrayList<>();

            for (int i = 0; i < aktivtSalg.getVareSalgsListe().size(); i++) {
                kasseVareListePanels.add(new KasseVareListePanel(this, aktivtSalg.getVareSalgsListe().get(i)));

            }

            for (int i = 0; i < kasseVareListePanels.size(); i++) {
                kasseListePanel.add(kasseVareListePanels.get(i));
                kasseVareListePanels.get(i).setBounds(0, locY, 430, 40);
                kasseVareListePanels.get(i).setVisible(true);
                locY = locY + kasseVareListePanels.get(i).getHeight() + 3;

                VareSalg vareSalg = kasseVareListePanels.get(i).getVareSalg();
                if (vareSalg.getRabat() != 0) {
                    KasseListeRabatPanel kasseListeRabatPanel = new KasseListeRabatPanel(vareSalg.getTotalPris(), vareSalg.getSalgsprisMedRabat(), vareSalg.getRabat());
                    kasseListePanel.add(kasseListeRabatPanel);
                    kasseListeRabatPanel.setBounds(0, locY - 2, 430, 20);
                    kasseListeRabatPanel.setVisible(true);
                    locY = locY + kasseListeRabatPanel.getHeight() + 3;
                }
            }

//</editor-fold>
            //<editor-fold defaultstate="collapsed" desc="Tilføjer BilletVareListePaneler til KasseListePanelet">
            ArrayList<KasseBilletListePanel> kasseBilletListePanels = new ArrayList<>();

            for (int i = 0; i < aktivtSalg.getBilletSalgsListe().size(); i++) {
                kasseBilletListePanels.add(new KasseBilletListePanel(this, aktivtSalg.getBilletSalgsListe().get(i)));

            }

            for (int i = 0; i < kasseBilletListePanels.size(); i++) {
                kasseListePanel.add(kasseBilletListePanels.get(i));
                kasseBilletListePanels.get(i).setBounds(0, locY, 430, 40);
                kasseBilletListePanels.get(i).setVisible(true);
                locY = locY + kasseBilletListePanels.get(i).getHeight() + 3;

                BilletSalg billetSalg = kasseBilletListePanels.get(i).getBilletSalg();
                if (billetSalg.getRabat() != 0) {
                    KasseListeRabatPanel kasseListeRabatPanel = new KasseListeRabatPanel(billetSalg.getTotalPris(), billetSalg.getSalgsprisMedRabat(), billetSalg.getRabat());
                    kasseListePanel.add(kasseListeRabatPanel);
                    kasseListeRabatPanel.setBounds(0, locY - 2, 430, 20);
                    kasseListeRabatPanel.setVisible(true);
                    locY = locY + kasseListeRabatPanel.getHeight() + 3;
                }
            }
//</editor-fold>
            //<editor-fold defaultstate="collapsed" desc="Tilføjer EventListePaneler til KasseListePanelet">
            ArrayList<KasseEventListePanel> kasseEventListePanels = new ArrayList<>();

            for (int i = 0; i < aktivtSalg.getEventSalgsListe().size(); i++) {
                kasseEventListePanels.add(new KasseEventListePanel(this, aktivtSalg.getEventSalgsListe().get(i)));
            }
            for (int i = 0; i < kasseEventListePanels.size(); i++) {
                kasseListePanel.add(kasseEventListePanels.get(i));
                kasseEventListePanels.get(i).setBounds(0, locY, 430, 40);
                kasseEventListePanels.get(i).setVisible(true);
                locY = locY + kasseEventListePanels.get(i).getHeight() + 3;

                EventSalg eventSalg = kasseEventListePanels.get(i).getEventSalg();
                if (eventSalg.getRabat() != 0) {
                    KasseListeRabatPanel kasseListeRabatPanel = new KasseListeRabatPanel(eventSalg.getTotalPris(), eventSalg.getSalgsprisMedRabat(), eventSalg.getRabat());
                    kasseListePanel.add(kasseListeRabatPanel);
                    kasseListeRabatPanel.setBounds(0, locY, 430, 20);
                    kasseListeRabatPanel.setVisible(true);
                    locY = locY + kasseListeRabatPanel.getHeight() + 4;
                }
            }
//</editor-fold>

            if (aktivtSalg.getRabat() != 0) {
                int salgsTotalPrisURabat = aktivtSalg.getVareSalgsListeTotalpris() + aktivtSalg.getBilletSalgsListeTotalpris() + aktivtSalg.getEventSalgsListeTotalpris();
                KasseListeSalgsRabatPanel kasseListeSalgsRabatPanel = new KasseListeSalgsRabatPanel(salgsTotalPrisURabat, aktivtSalg.beregnTotalBeløb(), aktivtSalg.getRabat());
                kasseListePanel.add(kasseListeSalgsRabatPanel);
                kasseListeSalgsRabatPanel.setBounds(0, locY, 430, 51);
                kasseListeSalgsRabatPanel.setVisible(true);
                locY = locY + 51 + 3;
            }

            kasseListePanel.setPreferredSize(new Dimension(430, locY));

            jTextField1_Totalbeløb.setText(PriceFormater.formaterPrisTilString(SalgsController.getInstance().getAktivtSalg().beregnTotalBeløb()));
            DebugUtility.getInstance().soutDebugLine(this, 1, "KasseListen er blevet opdateret");
        }
        jTextField2_Antal.setText("1");
        kasseListePanel.repaint();
        revalidate();
//        }
    }

    /**
     * Metoden søger en Vare ud fra varenummer, tjekker på lagerbeholdning og
     * tilføjer varen til det aktive salg
     *
     */
    public void søgVareOgTilføjTilAktivtSalg() {
        Vare enVare = null;
        int antalPåLager = 0;

        try {
            enVare = HandlerFactory.getInstance().getVareHandler().hentVareVedVarenummer(jTextField1_Varenr.getText());
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(this, "Fejlkode: 1001\nFejl ved hentning af objekt fra database. \\n Prøv igen eller kontakt netværksadministratoren \n" + ex.getLocalizedMessage(), "DatabaseTimeOut", 0);
        }

        if (enVare != null) {
            antalPåLager = enVare.getAntal();
            if (jTextField2_Antal.getText().matches("-?\\d+") && jTextField2_Antal.getText().length() <= 8) {
                jTextField2_Antal.setBorder(jTextField1_Varenr.getBorder());
                int antal;

                if (!returCheckBox.isSelected()) {
                    antal = Integer.parseInt(jTextField2_Antal.getText());
                } else {
                    antal = Integer.parseInt("-" + jTextField2_Antal.getText());
                }
                if (antalPåLager > antal) {
                    if (jTextField1_Rabat.getText().matches("-?\\d+(\\.\\d+)?")) {
                        int salgsPris;
                        if (SalgsController.getInstance().getAktivtSalg().isValutaDKK()) {
                            salgsPris = enVare.getUdsalgsprisDKKMedRabat();
                        } else {
                            salgsPris = enVare.getUdsalgsprisEUROMedRabat();
                        }
                        SalgsController.getInstance().tilføjVareTilSalg(enVare, antal, salgsPris, 0);
                        fejlLabel.setText("");
                        fejlLabel.setForeground(Color.BLACK);
                    }
                } else {
                    fejlLabel.setText("Vare ikke på lager");
                    fejlLabel.setForeground(Color.RED);
                }
            } else {
                fejlLabel.setText("Ikke korrekt indtastede data i antal");
                fejlLabel.setForeground(Color.RED);
                jTextField2_Antal.setBorder(BorderFactory.createLineBorder(Color.RED));
                jTextField2_Antal.selectAll();

            }
        } else {
            fejlLabel.setText("Kunne ikke finde en vare med det søgte varenummer");
            fejlLabel.setForeground(Color.RED);
            jTextField1_Varenr.selectAll();
        }

        opdaterKasseListeOgAktivtSalg();
    }

    public Point getJPanel1Location() {
        return jPanel1.getLocation();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        betalingsformRadioGroup = new javax.swing.ButtonGroup();
        valutaRadioGroup = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        jButton14_Barn = new javax.swing.JButton();
        jButton13_Voksen = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        jTextField1_Varenr = new javax.swing.JTextField();
        jTextField2_Antal = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jButton16_Gratist = new javax.swing.JButton();
        jPanel4 = new javax.swing.JPanel();
        valutaDKK_Knap = new javax.swing.JButton();
        valutaEUR_Knap = new javax.swing.JButton();
        dankortKnap = new javax.swing.JButton();
        kontantKnap = new javax.swing.JButton();
        jLabel11 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jButton15_Event1 = new javax.swing.JButton();
        returCheckBox = new javax.swing.JCheckBox();
        fejlLabel = new javax.swing.JLabel();
        jButton15_Fortryd = new javax.swing.JButton();
        jButton13_AfslutSalg1 = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        kasseListePanel = new javax.swing.JPanel();
        nytSalgKnap = new javax.swing.JButton();
        jTextField1_Totalbeløb = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        jTextField1_Rabat = new javax.swing.JTextField();
        jLabel12 = new javax.swing.JLabel();
        kassebeholdningsKnap = new javax.swing.JButton();
        lukKassenKnap = new javax.swing.JButton();

        setBackground(new java.awt.Color(255, 255, 255));
        setOpaque(false);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                formComponentHidden(evt);
            }
            public void componentShown(java.awt.event.ComponentEvent evt) {
                formComponentShown(evt);
            }
        });
        setLayout(null);

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel1.setOpaque(false);
        jPanel1.setLayout(null);

        jButton14_Barn.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        jButton14_Barn.setText("Barn");
        jButton14_Barn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton14_BarnActionPerformed(evt);
            }
        });
        jPanel1.add(jButton14_Barn);
        jButton14_Barn.setBounds(10, 104, 84, 59);

        jButton13_Voksen.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        jButton13_Voksen.setText("Voksen");
        jButton13_Voksen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton13_VoksenActionPerformed(evt);
            }
        });
        jPanel1.add(jButton13_Voksen);
        jButton13_Voksen.setBounds(10, 170, 84, 59);

        jLabel6.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel6.setText("Billetter:");
        jPanel1.add(jLabel6);
        jLabel6.setBounds(10, 80, 119, 24);

        jTextField1_Varenr.setNextFocusableComponent(jTextField2_Antal);
        jTextField1_Varenr.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextField1_VarenrFocusGained(evt);
            }
        });
        jTextField1_Varenr.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextField1_VarenrKeyReleased(evt);
            }
        });
        jPanel1.add(jTextField1_Varenr);
        jTextField1_Varenr.setBounds(90, 10, 260, 31);

        jTextField2_Antal.setText("1");
        jTextField2_Antal.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
        jTextField2_Antal.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextField2_AntalFocusGained(evt);
            }
        });
        jTextField2_Antal.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextField2_AntalKeyReleased(evt);
            }
        });
        jPanel1.add(jTextField2_Antal);
        jTextField2_Antal.setBounds(90, 45, 80, 26);

        jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel7.setText("Antal:");
        jPanel1.add(jLabel7);
        jLabel7.setBounds(5, 45, 80, 26);

        jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel8.setText("Varenummer:");
        jPanel1.add(jLabel8);
        jLabel8.setBounds(5, 10, 80, 31);

        jButton16_Gratist.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        jButton16_Gratist.setText("Gratist");
        jButton16_Gratist.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton16_GratistActionPerformed(evt);
            }
        });
        jPanel1.add(jButton16_Gratist);
        jButton16_Gratist.setBounds(10, 236, 84, 59);

        jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel4.setOpaque(false);
        jPanel4.setLayout(null);

        valutaDKK_Knap.setText("DKK");
        valutaDKK_Knap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                valutaDKK_KnapActionPerformed(evt);
            }
        });
        jPanel4.add(valutaDKK_Knap);
        valutaDKK_Knap.setBounds(20, 30, 110, 30);

        valutaEUR_Knap.setText("EUR");
        valutaEUR_Knap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                valutaEUR_KnapActionPerformed(evt);
            }
        });
        jPanel4.add(valutaEUR_Knap);
        valutaEUR_Knap.setBounds(20, 70, 110, 30);

        dankortKnap.setText("Dankort");
        dankortKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                dankortKnapActionPerformed(evt);
            }
        });
        jPanel4.add(dankortKnap);
        dankortKnap.setBounds(210, 30, 110, 30);

        kontantKnap.setText("Kontant");
        kontantKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                kontantKnapActionPerformed(evt);
            }
        });
        jPanel4.add(kontantKnap);
        kontantKnap.setBounds(210, 70, 110, 30);

        jLabel11.setText("Betalingsform:");
        jPanel4.add(jLabel11);
        jLabel11.setBounds(210, 10, 93, 20);

        jLabel9.setText("Valuta:");
        jPanel4.add(jLabel9);
        jLabel9.setBounds(20, 10, 63, 21);

        jPanel1.add(jPanel4);
        jPanel4.setBounds(10, 400, 340, 110);

        jButton15_Event1.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        jButton15_Event1.setText("Event");
        jButton15_Event1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton15_Event1ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton15_Event1);
        jButton15_Event1.setBounds(10, 302, 84, 59);

        returCheckBox.setText("Retur");
        returCheckBox.setContentAreaFilled(false);
        returCheckBox.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        returCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                returCheckBoxActionPerformed(evt);
            }
        });
        returCheckBox.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                returCheckBoxKeyPressed(evt);
            }
        });
        jPanel1.add(returCheckBox);
        returCheckBox.setBounds(200, 40, 110, 40);

        add(jPanel1);
        jPanel1.setBounds(435, 2, 360, 520);

        fejlLabel.setForeground(new java.awt.Color(255, 0, 0));
        add(fejlLabel);
        fejlLabel.setBounds(430, 524, 360, 20);

        jButton15_Fortryd.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        jButton15_Fortryd.setText("Afbryd Salg");
        jButton15_Fortryd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton15_FortrydActionPerformed(evt);
            }
        });
        add(jButton15_Fortryd);
        jButton15_Fortryd.setBounds(444, 550, 160, 44);

        jButton13_AfslutSalg1.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        jButton13_AfslutSalg1.setText("Afslut Salg");
        jButton13_AfslutSalg1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton13_AfslutSalg1ActionPerformed(evt);
            }
        });
        add(jButton13_AfslutSalg1);
        jButton13_AfslutSalg1.setBounds(626, 550, 160, 44);

        jPanel2.setBackground(new java.awt.Color(255, 255, 255));
        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel2.setOpaque(false);
        jPanel2.setLayout(null);

        jScrollPane2.setBackground(new java.awt.Color(255, 255, 255));
        jScrollPane2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        kasseListePanel.setBackground(new java.awt.Color(255, 255, 255));
        kasseListePanel.setToolTipText("IndkøbsListe");
        kasseListePanel.setLayout(null);

        nytSalgKnap.setText("Nyt Salg");
        nytSalgKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nytSalgKnapActionPerformed(evt);
            }
        });
        kasseListePanel.add(nytSalgKnap);
        nytSalgKnap.setBounds(100, 160, 230, 130);
        nytSalgKnap.setVisible(false);

        jScrollPane2.setViewportView(kasseListePanel);

        jPanel2.add(jScrollPane2);
        jScrollPane2.setBounds(0, 0, 430, 470);

        jTextField1_Totalbeløb.setEditable(false);
        jPanel2.add(jTextField1_Totalbeløb);
        jTextField1_Totalbeløb.setBounds(320, 480, 100, 30);

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        jLabel5.setText("Totalbeløb:");
        jPanel2.add(jLabel5);
        jLabel5.setBounds(240, 480, 90, 30);

        jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel10.setText("Tilføj Rabat:");
        jPanel2.add(jLabel10);
        jLabel10.setBounds(10, 480, 70, 30);

        jTextField1_Rabat.setDocument(new NumberRestrictionDocument(3));
        jTextField1_Rabat.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jTextField1_Rabat.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextField1_Rabat.setText("0");
        jTextField1_Rabat.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextField1_RabatFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextField1_RabatFocusLost(evt);
            }
        });
        jTextField1_Rabat.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextField1_RabatKeyReleased(evt);
            }
        });
        jPanel2.add(jTextField1_Rabat);
        jTextField1_Rabat.setBounds(90, 480, 50, 30);

        jLabel12.setText("%");
        jPanel2.add(jLabel12);
        jLabel12.setBounds(140, 480, 20, 30);

        add(jPanel2);
        jPanel2.setBounds(0, 2, 430, 520);

        kassebeholdningsKnap.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        kassebeholdningsKnap.setText("Kassebeholdning");
        kassebeholdningsKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                kassebeholdningsKnapActionPerformed(evt);
            }
        });
        add(kassebeholdningsKnap);
        kassebeholdningsKnap.setBounds(170, 550, 140, 44);

        lukKassenKnap.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        lukKassenKnap.setText("Luk Kasse");
        lukKassenKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                lukKassenKnapActionPerformed(evt);
            }
        });
        add(lukKassenKnap);
        lukKassenKnap.setBounds(10, 550, 140, 44);
    }// </editor-fold>//GEN-END:initComponents

    private void jButton15_Event1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton15_Event1ActionPerformed
        Rectangle r = new Rectangle(getLocationOnScreen(), getSize());
        ImageIcon img = null;
        try {
            img = new ImageIcon(ScreenImage.createImage(r));
        } catch (AWTException ex) {
            Logger.getLogger(BetalingsPanel.class.getName()).log(Level.SEVERE, null, ex);
        }
        mainGUI.visTilføjEventPanel(img);
    }//GEN-LAST:event_jButton15_Event1ActionPerformed

    private void jButton13_AfslutSalg1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton13_AfslutSalg1ActionPerformed
        Rectangle r = new Rectangle(getLocationOnScreen(), getSize());
        ImageIcon img = null;
        try {
            img = new ImageIcon(ScreenImage.createImage(r));
        } catch (AWTException ex) {
            Logger.getLogger(BetalingsPanel.class.getName()).log(Level.SEVERE, null, ex);
        }
        returCheckBox.setSelected(false);
        mainGUI.visBetalingsPanel(img);
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_jButton13_AfslutSalg1ActionPerformed

    private void jTextField1_VarenrKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField1_VarenrKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            søgVareOgTilføjTilAktivtSalg();
            jTextField1_Varenr.setText("");
        }
    }//GEN-LAST:event_jTextField1_VarenrKeyReleased

    private void nytSalgKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nytSalgKnapActionPerformed
        SalgsController.getInstance().lavNytSalg();
        jTextField1_Varenr.selectAll();
        jTextField1_Varenr.setEnabled(true);
        jTextField2_Antal.setEnabled(true);
        returCheckBox.setEnabled(true);
        jButton14_Barn.setEnabled(true);
        jButton13_Voksen.setEnabled(true);
        jButton16_Gratist.setEnabled(true);
        jButton15_Event1.setEnabled(true);
        jTextField1_Rabat.setEnabled(true);
        valutaDKK_Knap.setEnabled(true);
        valutaEUR_Knap.setEnabled(true);
        dankortKnap.setEnabled(true);
        kontantKnap.setEnabled(true);
        jButton15_Fortryd.setEnabled(true);
        jButton13_AfslutSalg1.setEnabled(true);
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_nytSalgKnapActionPerformed

    private void jTextField2_AntalKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField2_AntalKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            søgVareOgTilføjTilAktivtSalg();
        }
    }//GEN-LAST:event_jTextField2_AntalKeyReleased

    private void jButton14_BarnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton14_BarnActionPerformed

        Billet billet = null;
        try {
            billet = HandlerFactory.getInstance().getSalgsHandler().hentBilletVedType(jButton14_Barn.getText());
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(this, "Fejlkode: 1001\nFejl ved hentning af objekt fra database. \\n Prøv igen eller kontakt netværksadministratoren \n" + ex.getLocalizedMessage(), "DatabaseTimeOut", 0);
        }
        if (billet != null) {
            if (jTextField2_Antal.getText().matches("-?\\d+")) {
                int antal;
                if (!returCheckBox.isSelected()) {
                    antal = Integer.parseInt(jTextField2_Antal.getText());
                } else {
                    antal = Integer.parseInt("-" + jTextField2_Antal.getText());
                }
                jTextField2_Antal.setBorder(jTextField1_Varenr.getBorder());

                if (jTextField1_Rabat.getText().matches("-?\\d+(\\.\\d+)?")) {
                    int rabat = Integer.parseInt(jTextField1_Rabat.getText());
                    int salgsPris;
                    if (SalgsController.getInstance().getAktivtSalg().isValutaDKK()) {
                        salgsPris = billet.getPrisDKK();
                    } else {
                        salgsPris = billet.getPrisEURO();
                    }
                    try {
                        SalgsController.getInstance().tilføjBilletTilSalg(billet, antal, salgsPris, SalgsController.getInstance().getAktivtSalg().isValutaDKK(), rabat);
                    } catch (SQLException ex) {
                        System.out.println("Fejl i forsøg på, at tilføje billet til salg");
                    }
                }
            }
        }
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_jButton14_BarnActionPerformed

    private void jTextField1_RabatKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField1_RabatKeyReleased
        if (!jTextField1_Rabat.getText().isEmpty()) {
            SalgsController.getInstance().tilføjRabatPåSalg(Integer.parseInt(jTextField1_Rabat.getText()));
            opdaterKasseListeOgAktivtSalg();
        } else {
            SalgsController.getInstance().tilføjRabatPåSalg(0);
            opdaterKasseListeOgAktivtSalg();
        }
    }//GEN-LAST:event_jTextField1_RabatKeyReleased

    private void returCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_returCheckBoxActionPerformed
        if (returCheckBox.isSelected()) {
            jTextField2_Antal.setForeground(Color.RED);
        } else {
            jTextField2_Antal.setForeground(Color.BLACK);
        }
    }//GEN-LAST:event_returCheckBoxActionPerformed

    private void jButton15_FortrydActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton15_FortrydActionPerformed
        ConfirmDialog cd = new ConfirmDialog();
        if (cd.visBekræftDialog(mainGUI, "Vil du afbryde salget?", "Er du sikker?")) {
            SalgsController.getInstance().setAktivtSalg(null);
            opdaterKasseListeOgAktivtSalg();
        }
    }//GEN-LAST:event_jButton15_FortrydActionPerformed

    private void jTextField1_RabatFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextField1_RabatFocusLost
        if (jTextField1_Rabat.getText().isEmpty()) {
            jTextField1_Rabat.setText(0 + "");
        }
    }//GEN-LAST:event_jTextField1_RabatFocusLost

    private void jButton13_VoksenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton13_VoksenActionPerformed
        Billet billet = null;
        try {
            billet = HandlerFactory.getInstance().getSalgsHandler().hentBilletVedType(jButton13_Voksen.getText());
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(this, "Fejlkode: 1001\nFejl ved hentning af objekt fra database. \\n Prøv igen eller kontakt netværksadministratoren \n" + ex.getLocalizedMessage(), "DatabaseTimeOut", 0);
        }
        if (billet != null) {
            if (jTextField2_Antal.getText().matches("-?\\d+")) {
                int antal;
                if (!returCheckBox.isSelected()) {
                    antal = Integer.parseInt(jTextField2_Antal.getText());
                } else {
                    antal = Integer.parseInt("-" + jTextField2_Antal.getText());
                }
                jTextField2_Antal.setBorder(jTextField1_Varenr.getBorder());

                if (jTextField1_Rabat.getText().matches("-?\\d+(\\.\\d+)?")) {
                    int rabat = Integer.parseInt(jTextField1_Rabat.getText());
                    int salgsPris;
                    if (SalgsController.getInstance().getAktivtSalg().isValutaDKK()) {
                        salgsPris = billet.getPrisDKK();
                    } else {
                        salgsPris = billet.getPrisEURO();
                    }
                    try {
                        SalgsController.getInstance().tilføjBilletTilSalg(billet, antal, salgsPris, SalgsController.getInstance().getAktivtSalg().isValutaDKK(), rabat);
                    } catch (SQLException ex) {
                        System.out.println("Fejl i forsøg på, at tilføje billet til salg");
                    }
                }
            }
        }
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_jButton13_VoksenActionPerformed

    private void jButton16_GratistActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton16_GratistActionPerformed

        Billet billet = null;
        try {
            billet = HandlerFactory.getInstance().getSalgsHandler().hentBilletVedType(jButton16_Gratist.getText());
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(this, "Fejlkode: 1001\nFejl ved hentning af objekt fra database. \\n Prøv igen eller kontakt netværksadministratoren \n" + ex.getLocalizedMessage(), "DatabaseTimeOut", 0);
        }
        if (billet != null) {
            if (jTextField2_Antal.getText().matches("-?\\d+")) {
                int antal;
                if (!returCheckBox.isSelected()) {
                    antal = Integer.parseInt(jTextField2_Antal.getText());
                } else {
                    antal = Integer.parseInt("-" + jTextField2_Antal.getText());
                }
                jTextField2_Antal.setBorder(jTextField1_Varenr.getBorder());

                if (jTextField1_Rabat.getText().matches("-?\\d+(\\.\\d+)?")) {
                    int rabat = Integer.parseInt(jTextField1_Rabat.getText());
                    int salgsPris;
                    if (SalgsController.getInstance().getAktivtSalg().isValutaDKK()) {
                        salgsPris = billet.getPrisDKK();
                    } else {
                        salgsPris = billet.getPrisEURO();
                    }
                    try {
                        SalgsController.getInstance().tilføjBilletTilSalg(billet, antal, salgsPris, SalgsController.getInstance().getAktivtSalg().isValutaDKK(), rabat);
                    } catch (SQLException ex) {
                        System.out.println("Fejl i forsøg på, at tilføje billet til salg");
                    }
                }
            }
        }
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_jButton16_GratistActionPerformed

    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
        skærmNumpad.setVisible(true);
        if (!KasseController.getInstance().getAktivKasse().isKasseLukket()) {
            if (SalgsController.getInstance().getAktivtSalg() == null) {
                SalgsController.getInstance().lavNytSalg();
            }
            jTextField1_Varenr.selectAll();
            jTextField1_Varenr.setEnabled(true);
            jTextField2_Antal.setEnabled(true);
            returCheckBox.setEnabled(true);
            jButton14_Barn.setEnabled(true);
            jButton13_Voksen.setEnabled(true);
            jButton16_Gratist.setEnabled(true);
            jButton15_Event1.setEnabled(true);
            jTextField1_Rabat.setEnabled(true);
            valutaDKK_Knap.setEnabled(true);
            valutaEUR_Knap.setEnabled(true);
            dankortKnap.setEnabled(true);
            kontantKnap.setEnabled(true);
            jButton15_Fortryd.setEnabled(true);
            jButton13_AfslutSalg1.setEnabled(true);
            opdaterKasseListeOgAktivtSalg();
        } else {
            jTextField1_Varenr.setEnabled(false);
            jTextField2_Antal.setEnabled(false);
            returCheckBox.setEnabled(false);
            jButton14_Barn.setEnabled(false);
            jButton13_Voksen.setEnabled(false);
            jButton16_Gratist.setEnabled(false);
            jButton15_Event1.setEnabled(false);
            jTextField1_Rabat.setEnabled(false);
            valutaDKK_Knap.setEnabled(false);
            valutaEUR_Knap.setEnabled(false);
            dankortKnap.setEnabled(false);
            kontantKnap.setEnabled(false);
            jButton15_Fortryd.setEnabled(false);
            jButton13_AfslutSalg1.setEnabled(false);
            kassebeholdningsKnap.setEnabled(false);
            lukKassenKnap.setEnabled(false);
            nytSalgKnap.setEnabled(false);
            kasseListePanel.removeAll();
            jTextField1_Totalbeløb.setText("");
            fejlLabel.setForeground(Color.red);
            fejlLabel.setText("Kassen er lukket for i dag");
        }

        jTextField1_Varenr.requestFocus();
    }//GEN-LAST:event_formComponentShown

    private void formComponentHidden(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentHidden
        skærmNumpad.setVisible(false);
    }//GEN-LAST:event_formComponentHidden

    private void kassebeholdningsKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_kassebeholdningsKnapActionPerformed
        Kasse aktivKasse = KasseController.getInstance().getAktivKasse();
        int salgDKK;
        int salgEURO;
        try {
            salgDKK = KasseController.getInstance().totalSalgDKKVedKasse(aktivKasse, false);
            salgEURO = KasseController.getInstance().totalSalgEUROVedKasse(aktivKasse, false);
            int beholdningDKK = (aktivKasse.getStartBeholdningDKK() + salgDKK);
            int beholdningEURO = (aktivKasse.getStartBeholdningEURO() + salgEURO);
            String beholdningDkk = PriceFormater.formaterPrisTilString(beholdningDKK);
            String beholdningEuro = PriceFormater.formaterPrisTilString(beholdningEURO);

            JOptionPane.showMessageDialog(this, "DKK: " + beholdningDkk + "\nEURO: " + beholdningEuro, "Aktuel Kassebeholdning", 1);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(this, "Fejlkode: 1001\nFejl ved hentning af objekt fra database. \\n Prøv igen senere eller kontakt netværksadministratoren \n" + ex.getLocalizedMessage(), "DatabaseTimeOut", 0);
        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(this, "Fejlkode: 1001\nFejl ved sætning af dato. \\n Prøv igen senere eller kontakt netværksadministratoren \n" + ex.getLocalizedMessage(), "DatabaseTimeOut", 0);
        }


    }//GEN-LAST:event_kassebeholdningsKnapActionPerformed

    private void jTextField2_AntalFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextField2_AntalFocusGained
        jTextField2_Antal.selectAll();
    }//GEN-LAST:event_jTextField2_AntalFocusGained

    private void jTextField1_RabatFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextField1_RabatFocusGained
        jTextField1_Rabat.selectAll();
    }//GEN-LAST:event_jTextField1_RabatFocusGained

    private void returCheckBoxKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_returCheckBoxKeyPressed
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            søgVareOgTilføjTilAktivtSalg();
            jTextField1_Varenr.setText("");
        }
    }//GEN-LAST:event_returCheckBoxKeyPressed

    private void lukKassenKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lukKassenKnapActionPerformed
        ConfirmDialog CD = new ConfirmDialog();

        if (CD.visBekræftDialog(mainGUI, "Er du sikker på at du vil lukke kassen", "Sikker?")) {
            Rectangle r = new Rectangle(getLocationOnScreen(), getSize());
            ImageIcon img = null;
            try {
                img = new ImageIcon(ScreenImage.createImage(r));
            } catch (AWTException ex) {
                Logger.getLogger(BetalingsPanel.class.getName()).log(Level.SEVERE, null, ex);
            }
            mainGUI.visKasseBeholdningsPanel(false, img);
        } else {
            System.out.println("Du har valgt at trykket nej til at lukke kassen for idag");
        }

    }//GEN-LAST:event_lukKassenKnapActionPerformed

    private void valutaDKK_KnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_valutaDKK_KnapActionPerformed
        SalgsController.getInstance().getAktivtSalg().setValutaDKK(true);
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_valutaDKK_KnapActionPerformed

    private void valutaEUR_KnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_valutaEUR_KnapActionPerformed
        SalgsController.getInstance().getAktivtSalg().setValutaDKK(false);
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_valutaEUR_KnapActionPerformed

    private void dankortKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dankortKnapActionPerformed
        SalgsController.getInstance().getAktivtSalg().setDankort(true);
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_dankortKnapActionPerformed

    private void kontantKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_kontantKnapActionPerformed
        SalgsController.getInstance().getAktivtSalg().setDankort(false);
        opdaterKasseListeOgAktivtSalg();
    }//GEN-LAST:event_kontantKnapActionPerformed

    private void jTextField1_VarenrFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextField1_VarenrFocusGained
        jTextField1_Varenr.selectAll();
    }//GEN-LAST:event_jTextField1_VarenrFocusGained

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup betalingsformRadioGroup;
    private javax.swing.JButton dankortKnap;
    private javax.swing.JLabel fejlLabel;
    private javax.swing.JButton jButton13_AfslutSalg1;
    private javax.swing.JButton jButton13_Voksen;
    private javax.swing.JButton jButton14_Barn;
    private javax.swing.JButton jButton15_Event1;
    private javax.swing.JButton jButton15_Fortryd;
    private javax.swing.JButton jButton16_Gratist;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextField jTextField1_Rabat;
    private javax.swing.JTextField jTextField1_Totalbeløb;
    private javax.swing.JTextField jTextField1_Varenr;
    private javax.swing.JTextField jTextField2_Antal;
    private javax.swing.JPanel kasseListePanel;
    private javax.swing.JButton kassebeholdningsKnap;
    private javax.swing.JButton kontantKnap;
    private javax.swing.JButton lukKassenKnap;
    private javax.swing.JButton nytSalgKnap;
    private javax.swing.JCheckBox returCheckBox;
    private javax.swing.JButton valutaDKK_Knap;
    private javax.swing.JButton valutaEUR_Knap;
    private javax.swing.ButtonGroup valutaRadioGroup;
    // End of variables declaration//GEN-END:variables
}
